#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Nodo{
    int dato;
    struct Nodo *siguiente;
    struct Nodo *anterior;
}Nodo;

typedef struct {
    Nodo *inicio;
} Lista;

void inicializacion (Lista * tas){
    tas->inicio = NULL;
}
int  agregarAlFinal(Lista *tas,int dato){
    Nodo *nuevo_elemento;
    Nodo *actual;

    nuevo_elemento = (Nodo *) malloc (sizeof (Nodo));

    nuevo_elemento->dato= dato;
    nuevo_elemento->siguiente =NULL;


   if(tas->inicio==NULL)
   {
     tas->inicio=nuevo_elemento;
     nuevo_elemento->anterior=NULL;
   }
   else
   {
       actual=tas->inicio;
       while(1)
       {
           if(actual->siguiente==NULL)
           {
               break;
           }
            actual=actual->siguiente;
       }
          actual->siguiente=nuevo_elemento;
          nuevo_elemento->anterior=actual;
   }
}
int agregarAlPricipio(Lista * tas,int dato){
    Nodo *nuevo_elemento;
    if ((nuevo_elemento = (Nodo *) malloc (sizeof (Nodo))) == NULL)
        return -1;

    nuevo_elemento->dato= dato;
    nuevo_elemento->siguiente = tas->inicio;
    tas->inicio = nuevo_elemento;
    nuevo_elemento->anterior=NULL;
}
int main()
{
    Lista *tas;
    int  nom;
    int op;

    if ((tas = (Lista *) malloc (sizeof (Lista))) == NULL)
        return -1;
    inicializacion (tas);
    while(1)
    {
        cout<<"Ingrese un Numero: ";
        cin>>nom;
        cout<<"Elegir opcion: ";
        cin>>op;
        switch(op)
        {
         case 1:
            agregarAlFinal(tas,nom);
            break;
            case 2:
            agregarAlPricipio(tas,nom);
            break;
            /*
            case 3:
            agregarOrdenado(tas,nom);
            break;
            case 4:
            eliminarUltimo(tas);
            break;
            case 5:
            eliminarPrimero(tas);
            break;
            case 6:
            buscarNodo(tas,nom);
            break;
            case 7:
            ordenar(tas);
            break;
            case 8:
            mostrarLista(tas);
            break;
            */
            case 9:
            return 1;
            break;

        }

    }

}

